package com.csmall.commons.restful;

import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @Name: JsonPage
 * @Author: 西风残叶
 * @Date: 2024/8/23 17:25
 * @Version: 1.0
 * @TODO: 替代Page/PageInfo这样的由框架提供的分页信息类,这样当前微服务项目所有分页业务都可以使用这个类型,实现通用属性的个数原则是满足前端需要即可,这里列出最基本的分页信息属性
 */
@Data
public class JsonPage<T> implements Serializable {
    @ApiModelProperty(value = "总页数",name = "totalPages")
    private Integer totalPages;
    @ApiModelProperty(value = "总条数",name = "totalCount")
    private Long totalCount;
    @ApiModelProperty(value = "当前页码",name = "page")
    private Integer page;
    @ApiModelProperty(value = "当前每页条数",name = "pageSize")
    private Integer pageSize;
    // JsonPage对象要能够报错分页数据
    @ApiModelProperty(value = "分页数据",name = "list")
    private List<T> list;

    /**
     * 将PageInfo对象转换为JsonPage对象
     * 此方法用于将分页信息从PageInfo格式转换为JsonPage格式，以便于JSON序列化和网络传输
     *
     * @param pageInfo 被转换的PageInfo对象，包含分页相关信息和数据
     * @param <T> 泛型标记，表示页面数据的类型
     * @return 转换后的JsonPage对象，其中包含了与PageInfo相同的数据和分页信息
     */
    public static <T> JsonPage<T> restPage(PageInfo<T> pageInfo){
        JsonPage<T> jsonPage=new JsonPage<>();
        // 设置总页数
        jsonPage.setTotalPages(pageInfo.getPages());
        // 设置总记录数
        jsonPage.setTotalCount(pageInfo.getTotal());
        // 设置当前页码
        jsonPage.setPage(pageInfo.getPageNum());
        // 设置每页显示的记录数
        jsonPage.setPageSize(pageInfo.getPageSize());
        // 分页数据也要赋值过来
        jsonPage.setList(pageInfo.getList());
        // 最后返回转换完成的对象
        return jsonPage;
    }
}